The invention relates to the field of parallel processing systems. As enterprises deploy applications with increasing requirements for computation, data handling, and transaction throughput, individual computers are increasingly unable to meet performance demands. Traditional solutions to this problem include use of more powerful servers, such as those including multiple processors, and dedicated clusters of servers.
Distributed computing is a form of computing through which an application may be run on many computers linked via a network. Cluster computing is a particular form of distributed computing through which multiple instances of applications may be executed across a large number of identical computers interconnected via a dedicated communications network. A large computing task is divided into a set of smaller tasks, which are then processed sequentially or simultaneously by the computers in the cluster. Although clusters typically use commodity hardware to control costs, enterprises must spend a great deal of time and money to acquire and maintain large clusters of computers. Additionally, increasing the capabilities of a cluster requires adding more dedicated servers to the cluster and typically requires additional networking hardware and extensive reconfiguration of the software controlling the cluster. Further, software for controlling and optimizing clusters requires significant specialized expertise to develop and maintain.
Some experimental distributed computing systems attempt to harvest otherwise unused computing resources in an enterprise, such as idle desktop computers in an enterprise. However, these systems typically require applications specifically developed for distributed computing environments. Furthermore, configuring, deploying, and maintaining these systems and their applications is difficult and unwieldy. Unlike typical cluster systems with identical computers, enterprises may have a wide variety of computers with vastly different capabilities. If a distributing computing system is poorly designed or misconfigured, the application may overwhelm an enterprise's computers and/or networks, preventing them from performing their primary function and potentially crippling the operations of an enterprise. To coordinate the operations of computers in these types of distributed computing systems, a powerful central server is required. Scalability of the distributed computing system is often limited by the capabilities of the central server. Additionally, security for these distributed computing systems ranges from poor to non-existent. Also, there are poor facilities for monitoring and potentially billing for use of a distributed computing system, limiting the ability of enterprises to allocate costs and realize revenue for executing applications.
Additionally, recent advances in microprocessor designs have made processors with multiple independent processing cores and computing systems with multiple processors much more prevalent. Typically, applications must be specifically engineered to take advantage of multiple processors and multicore processors. For example, applications may have to be specifically engineered to operate using multiple threads of execution to take advantage of multiple processors and multicore processors. In many cases, if an application is not engineered to take advantage of multiple processors and multicore processors, then the extra processors and processor cores will not be utilized by the application.
In many cases, it is difficult or impossible to engineer older or legacy applications to take advantage of multiple processors and multicore processors. For example, an application originally designed to operate on a single processor or processor core may require substantial re-engineering to be adapted to take advantage of multiple processors and multicore processors. For some legacy applications, the source code of the application may not be available for modification.
It is therefore desirable for a distributed processing system to utilize an enterprise's shared and dedicated computing resources flexibly. It is also desirable for the distributed processing system to enable the configuration and deployment of applications, including legacy applications, without conversion or recompilation. It is further desirable for the distributed processing system to be able to match computing tasks with appropriate computing resources to optimize the utilization of available resources and to avoid overwhelming computers and/or networks. It is desirable for the distributed processing system to be readily scalable, to provide security for both computing resources processing data and for the data itself, and to provide metering, pricing, accounting, and billing tools enabling efficient compensation for the usage of computing resources. Additionally, it is desirable for a distributed processing system to specifically take advantage of multiple processors and multicore processors to further improve execution performance of applications.